package models

import (
	"time"

	"gorm.io/gorm"
)

// AppointmentConfig 预约配置表
type AppointmentConfig struct {
	ID        uint           `json:"id" gorm:"primaryKey"`
	CreatedAt time.Time      `json:"created_at"`
	UpdatedAt time.Time      `json:"updated_at"`
	DeletedAt gorm.DeletedAt `json:"deleted_at" gorm:"index"`

	// 配置信息
	Date          string `json:"date" gorm:"size:10;not null;uniqueIndex"` // 格式: 2025-09-06
	StartTime     string `json:"start_time" gorm:"size:8;not null"`        // 格式: 09:30
	EndTime       string `json:"end_time" gorm:"size:8;not null"`          // 格式: 22:00
	IntervalMinutes int  `json:"interval_minutes" gorm:"default:90"`       // 每人间隔分钟数
	MaxAppointments int  `json:"max_appointments" gorm:"default:0"`        // 最大预约数，0表示无限制
	StaffCount      int  `json:"staff_count" gorm:"default:1"`             // 美甲师人数
	Status        int    `json:"status" gorm:"default:1"`                  // 1:启用 0:禁用
	IsLeave       bool   `json:"is_leave" gorm:"default:false"`            // 是否请假 0:正常 1:请假
	LeaveReason   string `json:"leave_reason" gorm:"size:255"`             // 请假原因
	
	// 关联
	Appointments []Appointment `json:"appointments,omitempty" gorm:"foreignKey:ConfigID"`
}

// Appointment 预约记录表
type Appointment struct {
	ID        uint           `json:"id" gorm:"primaryKey"`
	CreatedAt time.Time      `json:"created_at"`
	UpdatedAt time.Time      `json:"updated_at"`
	DeletedAt gorm.DeletedAt `json:"deleted_at" gorm:"index"`

	// 关联信息
	ConfigID        uint `json:"config_id" gorm:"not null;index"`
	UserID          uint `json:"user_id" gorm:"not null;index"`           // 预约创建者
	AppointedUserID uint `json:"appointed_user_id" gorm:"default:0"`      // 被预约的用户ID
	StaffUserID     uint `json:"staff_user_id" gorm:"default:0;index"`    // 分配的美甲师ID
	
	// 预约信息
	AppointmentDate string    `json:"appointment_date" gorm:"size:10;not null"` // 预约日期
	AppointmentTime string    `json:"appointment_time" gorm:"size:8;not null"`  // 预约时间
	EstimatedTime   time.Time `json:"estimated_time" gorm:"not null"`           // 预计到店时间
	QueueNumber     int       `json:"queue_number" gorm:"not null"`             // 排队号码
	Status          int       `json:"status" gorm:"default:1"`                  // 1:待确认 2:已确认 3:已完成 4:已取消
	CancelReason    string    `json:"cancel_reason" gorm:"size:255"`            // 取消原因
	
	// 用户信息
	CustomerName    string `json:"customer_name" gorm:"size:50;not null"`
	CustomerPhone   string `json:"customer_phone" gorm:"size:20;not null"`
	CustomerRemark  string `json:"customer_remark" gorm:"size:255"`
	
	// 服务信息
	ServiceID       int    `json:"service_id" gorm:"not null;default:1"`     // 服务ID
	ProductTitle    string `json:"product_title" gorm:"size:100;not null;default:''"` // 预约商品标题
	ServiceType     string `json:"service_type" gorm:"size:50;default:''"`   // 服务类型
	ServiceName     string `json:"service_name" gorm:"size:100;default:''"`  // 服务名称
	
	// 图片和备注
	EffectImages    string `json:"effect_images" gorm:"type:text"` // 效果图URLs，JSON格式存储
	Images          string `json:"images" gorm:"type:text"`        // 图片URLs，JSON格式存储
	Notes           string `json:"notes" gorm:"type:text"`         // 备注信息
	
	// 关联
	Config        *AppointmentConfig `json:"config,omitempty" gorm:"foreignKey:ConfigID"`
	User          *User        `json:"user,omitempty" gorm:"foreignKey:UserID"`                    // 预约创建者
	Staff         *User        `json:"staff,omitempty" gorm:"foreignKey:StaffUserID"`               // 分配的美甲师
}

// TableName 指定表名
func (AppointmentConfig) TableName() string {
	return "appointment_configs"
}

// TableName 指定表名
func (Appointment) TableName() string {
	return "appointments"
}
